home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / umich / utils / belltst2.lzh / BELLTEST.C next >
C/C++ Source or Header  |  1990-04-05  |  7KB  |  376 lines

  1. #include <aes.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <tos.h>
  5. #include <string.h>
  6. #include <mydefs.h>
  7. #include "strins.c"
  8. #include "belltest.h"
  9. #include "belltstr.c"
  10.  
  11. void mess(char *c)
  12.     {
  13.     char     a[40];
  14.     
  15.     graf_mouse(ARROW,0);
  16.     strcpy(a,"[3][");
  17.     strcat(a,c);
  18.     strcat(a,"][OK]");
  19.     form_alert(1,a);
  20.     graf_mouse(POINT_HAND,0);
  21.     }
  22.  
  23. /*******************************
  24.     Select a file
  25. *******************************/
  26. int fileselect(
  27.     char     *s,
  28.     char    *ext)
  29.     {
  30.     char    p[64];
  31.     int        n;
  32.     int        drv;
  33.  
  34.     drv = Dgetdrv();
  35.     Dgetpath(p,0);
  36.     if (p[0] != '\\')    strinc(p,0,'\\');
  37.     strins(p,0,"A:");
  38.     while (drv > 0)
  39.         {
  40.         --drv;
  41.         ++p[0];
  42.         }
  43.     if (p[strlen(p)-1] != '\\')    strcat(p,"\\");
  44.     strcat(p,ext);
  45.     graf_mouse(ARROW,0);
  46.     fsel_input(p,s,&n);
  47.     graf_mouse(POINT_HAND,0);
  48.     if (strrchr(p,'\\') != strchr(p,'\\'))
  49.         *(strrchr(p,'\\')) = 0x0;
  50.     else
  51.         *(strrchr(p,'\\')+1) = 0x0;
  52.     while (*p > 'A')
  53.         {
  54.         --p[0];
  55.         ++drv;
  56.         }
  57.     Dsetdrv(drv);
  58.     Dsetpath(p+2);
  59.     return(n);
  60.     }
  61.  
  62. void dial_draw(
  63.     int box_ind,
  64.     int    obj    )
  65.     {
  66.     int        x1,y1;
  67.     OBJECT    *redraw;
  68.     
  69.     redraw = &rs_object[rs_trloc[box_ind]+obj];
  70.     objc_offset(rs_trindex[box_ind],obj,&x1,&y1);
  71.     objc_draw(rs_trindex[box_ind],1,10,x1,y1,redraw->ob_width,redraw->ob_height);
  72.     }
  73.  
  74.  
  75. void erase_dialog(
  76.     int    x,
  77.     int    y,
  78.     int    w,
  79.     int    h    )
  80.     {
  81.     int sx,sy;
  82.     sx=x+(w/2);
  83.     sy=y+(h/2);
  84.     form_dial(FMD_SHRINK,sx,sy,0,0,x,y,w,h);
  85.     form_dial(FMD_FINISH,sx,sy,0,0,x,y,w,h);
  86.     }
  87.  
  88. void draw_dialog(
  89.     int        box_ind,
  90.     int        *x,
  91.     int        *y,
  92.     int        *w,
  93.     int        *h,
  94.     char    draw    )
  95.     {
  96.     int        sx,sy;
  97.     
  98.     form_center(rs_trindex[box_ind],x,y,w,h);
  99.     sx=*x+(*w/2);
  100.     sy=*y+(*h/2);
  101.     
  102.     form_dial(FMD_START,sx,sy,0,0,*x,*y,*w,*h); 
  103.     form_dial(FMD_GROW,sx,sy,0,0,*x,*y,*w,*h);
  104.     if (draw) objc_draw(rs_trindex[box_ind],0,10,*x,*y,*w,*h);
  105.     }
  106.  
  107. void unselect(
  108.     int box,
  109.     int item)
  110.     {
  111.     rs_object[rs_trloc[box]+item].ob_state &= UNSELECT;
  112.     }
  113.  
  114. int selected(
  115.     int box,
  116.     int item)
  117.     {
  118.     return(rs_object[rs_trloc[box]+item].ob_state & SELECTED);
  119.     }
  120.  
  121. int    exit_dialog(
  122.     int box_ind,
  123.     int    x,
  124.     int    y,
  125.     int    w,
  126.     int    h,
  127.     int    draw    )
  128.     {
  129.     int     e;
  130.     
  131.     if (draw) objc_draw(rs_trindex[box_ind],0,10,x,y,w,h);
  132.     e = form_do(rs_trindex[box_ind],0);
  133.     unselect(box_ind,e);
  134.     dial_draw(box_ind,e);
  135.     return(e);
  136.     }
  137.  
  138. void putspeed(char c)
  139.     {
  140.     int i;
  141.  
  142.     for(i=MAINSPD1;i<=MAINSPD5;i++)
  143.         if ((rs_object[i].ob_state & SELECTED)!=0)
  144.             {
  145.             if (c != *rs_object[i].ob_spec.free_string)
  146.                 rs_object[i].ob_state &= UNSELECT;
  147.             }
  148.         else
  149.             {
  150.             if (c == *rs_object[i].ob_spec.free_string)
  151.                 rs_object[i].ob_state |= SELECTED;
  152.             }
  153.     }
  154.  
  155.  
  156. char getspeed(void)
  157.     {
  158.     int i;
  159.     char c='3';
  160.  
  161.     for(i=MAINSPD1;i<=MAINSPD5;i++)
  162.         if ((rs_object[i].ob_state & SELECTED)!=0)
  163.             c = *rs_object[i].ob_spec.free_string;
  164.     return(c);
  165.     }
  166.  
  167. int main()
  168.     {
  169.     int         x,y,w,h;
  170.     int         choice,flag,fd;
  171.     static char *ext="*.SND";
  172.     static COMMAND line={0,"0 BELLTEST.SND"};
  173.     static COMMAND lin2={0,"1 BELLTEST.SND"};
  174.     char         *buf,*buf2,*file,*fil2;
  175.     DTA            *dta;
  176.     long        l,l2;
  177.     static char *newb="\0C:\\AUTO\\NEWBELL.PRG";
  178.     long         *screen;
  179.     long        cnt;
  180.     long        *scrbuf;
  181.     long        b1,b2;
  182.     int            slc,sld,slr;
  183.     int            loaded;
  184.     int            saving;
  185.  
  186.     /*      INITIALIZE GEM              */
  187.     appl_init();
  188.        fix_objects();
  189.     
  190.     /*      APPLICATION ROUTINES        */
  191.     graf_mouse(POINT_HAND,0);
  192.  
  193.     flag=0;
  194.     if (Fsfirst("NEWBELL.PRG",0)<0)
  195.         {
  196.         ++flag;
  197.         if (Fsfirst("C:\\AUTO\\NEWBELL.PRG",0)<0)
  198.             {
  199.             ++flag;
  200.             if (Fsfirst("A:\\AUTO\\NEWBELL.PRG",0)<0)
  201.                 {
  202.                 mess("NEWBELL.PRG NOT FOUND");
  203.                 ++flag;
  204.                 }
  205.             else
  206.                 strcpy(newb,"A:\\AUTO\\NEWBELL.PRG");
  207.             }
  208.         else
  209.             strcpy(newb,"C:\\AUTO\\NEWBELL.PRG");
  210.         }
  211.     else
  212.         strcpy(newb,"NEWBELL.PRG");
  213.  
  214.     if (flag!=3)
  215.         {
  216.         draw_dialog(MAINDIAL,&x,&y,&w,&h,1);
  217.         sld = rs_object[rs_trloc[MAINDIAL]+MAINSLID].ob_x;
  218.         file = line.command_tail+2;
  219.         fil2 = lin2.command_tail+2;
  220.         buf = NULL;
  221.         slc = sld;
  222.         loaded = 0;
  223.         choice=0;
  224.         while(choice!=MAINQUIT)
  225.             {
  226.             saving=0;
  227.             choice = exit_dialog(MAINDIAL,x,y,w,h,0);
  228.             switch(choice)
  229.                 {
  230.                 case MAINLOAD:
  231.                     erase_dialog(x,y,w,h);
  232.                     if (fileselect(file,ext))
  233.                         {
  234.                         if (Fsfirst(file,0)>=0)
  235.                             {
  236.                             dta = Fgetdta();
  237.                             l = dta->d_length;
  238.                             if (buf!=NULL)
  239.                                 free(buf);
  240.                             buf=malloc(l+16);
  241.                             fd=Fopen(file,READ);
  242.                             if (fd>=0)
  243.                                 loaded=1;
  244.                             Fread(fd,l,buf);
  245.                             Fclose(fd);
  246.                             if ((*buf<6)&&(*buf>0))
  247.                                 putspeed(*buf+'0');
  248.                             slc=sld;
  249.                             rs_object[rs_trloc[MAINDIAL]+MAINSLID].ob_x=slc;
  250.                             dial_draw(MAINDIAL,MAINBACK);
  251.                             }
  252.                         }
  253.                     draw_dialog(MAINDIAL,&x,&y,&w,&h,1);
  254.                     break;
  255.                 case MAINSAVE: saving = 1;
  256.                 case MAINPLAY:
  257.                     if (loaded)
  258.                         {
  259.                         scrbuf=malloc(32768L);
  260.                         if (scrbuf!=NULL)
  261.                             {
  262.                             graf_mouse(M_OFF,0);
  263.                             screen=(long *)Physbase();
  264.                             for(cnt=0;cnt<8192L;cnt++)
  265.                                 {
  266.                                 *(scrbuf+cnt)=*(screen+cnt);
  267.                                 *(screen+cnt)=0L;
  268.                                 }
  269.                             }
  270.                         line.length = strlen(line.command_tail);
  271.                         lin2.length = strlen(lin2.command_tail);
  272.                         *line.command_tail = getspeed();
  273.                         *lin2.command_tail = getspeed();
  274.                         *buf = getspeed() - '0';
  275.                         if (slc==sld)
  276.                             {
  277.                             fd=Fopen(file,WRITE);
  278.                             Fwrite(fd,l,buf);
  279.                             Fclose(fd);
  280.                             if (!saving)
  281.                                 Pexec(0,newb,&line,NULL);
  282.                             }
  283.                         else
  284.                             {
  285.                             if (slc<sld)
  286.                                 {
  287.                                 slr=slc+1;
  288.                                 l2=l+(l/slr)+slr;
  289.                                 }
  290.                             else
  291.                                 {
  292.                                 slr=((2*sld)+2)-slc;
  293.                                 l2=l-(l/slr)+slr;
  294.                                 }
  295.                             buf2=malloc(l2);
  296.                             if (buf2!=NULL)
  297.                                 {
  298.                                 for(b1=0,b2=0;b1<l;b1++)
  299.                                     {
  300.                                     *(buf2+b2)=*(buf+b1);
  301.                                     ++b2;
  302.                                     if (((b1+1)%slr)==0)
  303.                                         {
  304.                                         if (slc>sld)
  305.                                             --b2;
  306.                                         else
  307.                                             {
  308.                                             *(buf2+b2)=*(buf+b1);
  309.                                             ++b2;
  310.                                             }
  311.                                         }
  312.                                     }
  313.                                 fd=Fcreate(fil2,0);
  314.                                 Fclose(fd);
  315.                                 fd=Fopen(fil2,WRITE);
  316.                                 Fwrite(fd,l2,buf2);
  317.                                 Fclose(fd);
  318.                                 if (!saving)
  319.                                     {
  320.                                     Pexec(0,newb,&lin2,NULL);
  321.                                     Fdelete(fil2);
  322.                                     }
  323.                                 else
  324.                                     {
  325.                                     Fdelete(file);
  326.                                     Frename(0,fil2,file);
  327.                                     }
  328.                                 free(buf2);
  329.                                 }
  330.                             else
  331.                                 {
  332.                                 mess("Not enough memory!");
  333.                                 mess("Center slider?");
  334.                                 }
  335.                             }
  336.                         if (scrbuf!=NULL)
  337.                             {
  338.                             for(cnt=0;cnt<8192L;cnt++)
  339.                                 *(screen+cnt)=*(scrbuf+cnt);
  340.                             free(scrbuf);
  341.                             graf_mouse(M_ON,0);
  342.                             graf_mouse(POINT_HAND,0);
  343.                             }
  344.                         }
  345.                     else
  346.                         mess("Load .SND first!");
  347.                     break;
  348.                 case MAINLESS:
  349.                     if (slc>0)
  350.                         {
  351.                         --slc;
  352.                         rs_object[rs_trloc[MAINDIAL]+MAINSLID].ob_x=slc;
  353.                         dial_draw(MAINDIAL,MAINBACK);
  354.                         }
  355.                     break;
  356.                 case MAINMORE:
  357.                     if (slc<(2*sld))
  358.                         {
  359.                         ++slc;
  360.                         rs_object[rs_trloc[MAINDIAL]+MAINSLID].ob_x=slc;
  361.                         dial_draw(MAINDIAL,MAINBACK);
  362.                         }
  363.                     break;
  364.                 case MAINQUIT:
  365.                     break;
  366.                 }
  367.             }
  368.         erase_dialog(x,y,w,h);
  369.         if (buf!=NULL)
  370.             free(buf);
  371.         }
  372.     graf_mouse(ARROW,0);
  373.     appl_exit();
  374.     return(0);
  375.     }
  376.